package mx.ipn.escom.redes.equipo.model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "equipo")
public class Equipo {

	private Integer idEquipo;

	private String nombre;

	private String marca;

	private String modelo;

	private String numeroSerie;

	private Integer idCategoriaEquipo;

	private CategoriaEquipo categoriaEquipo;

	private List<Empleado> listEmpleado;

	private List<AplicacionSoftware> listSoftware;

	private List<Documento> listDocumento;

	private List<Proceso> listProceso;
	
	private Integer existencia;

	private Integer idSala;

	private Integer idEdificio;

	private Sala sala;

	private Edificio edificio;

	public Equipo() {
	}

	/**
	 * @return the idEquipo
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "idEquipo", nullable = false)
	public Integer getIdEquipo() {
		return idEquipo;
	}

	/**
	 * @param idEquipo
	 *            the idEquipo to set
	 */
	public void setIdEquipo(Integer idEquipo) {
		this.idEquipo = idEquipo;
	}

	/**
	 * @return the nombre
	 */
	@Column(name = "nombre", nullable = false)
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre
	 *            the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the marca
	 */
	@Column(name = "marca", nullable = false)
	public String getMarca() {
		return marca;
	}

	/**
	 * @param marca
	 *            the marca to set
	 */
	public void setMarca(String marca) {
		this.marca = marca;
	}

	/**
	 * @return the modelo
	 */
	@Column(name = "modelo", nullable = false)
	public String getModelo() {
		return modelo;
	}

	/**
	 * @param modelo
	 *            the modelo to set
	 */
	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	/**
	 * @return the numeroSerie
	 */
	@Column(name = "numeroSerie", nullable = false)
	public String getNumeroSerie() {
		return numeroSerie;
	}

	/**
	 * @param numeroSerie
	 *            the numeroSerie to set
	 */
	public void setNumeroSerie(String numeroSerie) {
		this.numeroSerie = numeroSerie;
	}

	/**
	 * @return the idCategoriaEquipo
	 */
	@Column(name = "idCategoriaEquipo", nullable = false)
	public Integer getIdCategoriaEquipo() {
		return idCategoriaEquipo;
	}

	/**
	 * @param idCategoriaEquipo
	 *            the idCategoriaEquipo to set
	 */
	public void setIdCategoriaEquipo(Integer idCategoriaEquipo) {
		this.idCategoriaEquipo = idCategoriaEquipo;
	}

	/**
	 * @return the categoriaEquipo
	 */
	@ManyToOne
	@JoinColumn(name = "idCategoriaEquipo", referencedColumnName = "idCategoriaEquipo", insertable = false, updatable = false)
	public CategoriaEquipo getCategoriaEquipo() {
		return categoriaEquipo;
	}

	/**
	 * @param categoriaEquipo
	 *            the categoriaEquipo to set
	 */
	public void setCategoriaEquipo(CategoriaEquipo categoriaEquipo) {
		this.categoriaEquipo = categoriaEquipo;
	}

	/**
	 * @return the listEquipo
	 */
	@ManyToMany
	@JoinTable(name = "empleadoConEquipo", joinColumns = { @JoinColumn(name = "idEquipo", referencedColumnName = "idEquipo", insertable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "idEmpleado", referencedColumnName = "idEmpleado", insertable = false, updatable = false) })
	public List<Empleado> getListEmpleado() {
		return listEmpleado;
	}

	/**
	 * @param listEquipo
	 *            the listEquipo to set
	 */
	public void setListEmpleado(List<Empleado> listEmpleado) {
		this.listEmpleado = listEmpleado;
	}

	/**
	 * @return the listSoftware
	 */
	@ManyToMany
	@JoinTable(name = "equipoConSoftware", joinColumns = { @JoinColumn(name = "idEquipo", referencedColumnName = "idEquipo", insertable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "idSoftware", referencedColumnName = "idSoftware", insertable = false, updatable = false) })
	public List<AplicacionSoftware> getListSoftware() {
		return listSoftware;
	}

	/**
	 * @param listSoftware
	 *            the listSoftware to set
	 */
	public void setListSoftware(List<AplicacionSoftware> listSoftware) {
		this.listSoftware = listSoftware;
	}

	/**
	 * @return the listDocumento
	 */
	@ManyToMany
	@JoinTable(name = "equipoConDocumentacion", joinColumns = { @JoinColumn(name = "idEquipo", referencedColumnName = "idEquipo", insertable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "idDocumentacion", referencedColumnName = "idDocumentacion", insertable = false, updatable = false) })
	public List<Documento> getListDocumento() {
		return listDocumento;
	}

	/**
	 * @param listDocumento
	 *            the listDocumento to set
	 */
	public void setListDocumento(List<Documento> listDocumento) {
		this.listDocumento = listDocumento;
	}

	/**
	 * @return the listProceso
	 */
	@ManyToMany
	@JoinTable(name = "equipoConProceso", joinColumns = { @JoinColumn(name = "idEquipo", referencedColumnName = "idEquipo", insertable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "idProceso", referencedColumnName = "idProceso", insertable = false, updatable = false) })
	public List<Proceso> getListProceso() {
		return listProceso;
	}

	/**
	 * @param listProceso
	 *            the listProceso to set
	 */
	public void setListProceso(List<Proceso> listProceso) {
		this.listProceso = listProceso;
	}

	/**
	 * @return the idSala
	 */
	@Column(name = "idSala", nullable = false)
	public Integer getIdSala() {
		return idSala;
	}

	/**
	 * @param idSala
	 *            the idSala to set
	 */
	public void setIdSala(Integer idSala) {
		this.idSala = idSala;
	}

	/**
	 * @return the idEdificio
	 */
	@Column(name = "idEdificio", nullable = false)
	public Integer getIdEdificio() {
		return idEdificio;
	}

	/**
	 * @param idEdificio
	 *            the idEdificio to set
	 */
	public void setIdEdificio(Integer idEdificio) {
		this.idEdificio = idEdificio;
	}

	/**
	 * @return the sala
	 */
	@ManyToOne
	@JoinColumn(name = "idSala", referencedColumnName = "idSala", insertable = false, updatable = false)
	public Sala getSala() {
		return sala;
	}

	/**
	 * @param sala
	 *            the sala to set
	 */
	public void setSala(Sala sala) {
		this.sala = sala;
	}

	/**
	 * @return the edificio
	 */
	@ManyToOne
	@JoinColumn(name = "idEdificio", referencedColumnName = "idEdificio", insertable = false, updatable = false)
	public Edificio getEdificio() {
		return edificio;
	}

	/**
	 * @param edificio
	 *            the edificio to set
	 */
	public void setEdificio(Edificio edificio) {
		this.edificio = edificio;
	}

	/**
	 * @return the existencia
	 */
	@Column(name="cantidad")
	public Integer getExistencia() {
		return existencia;
	}

	/**
	 * @param existencia the existencia to set
	 */
	public void setExistencia(Integer existencia) {
		this.existencia = existencia;
	}

}
